From: Giovanni Campagna Date: Thu, 16 Aug 2012 19:11:54 +0000 (+0200) Subject: ShellIdleMonitor: turn it into a singleton X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~6176 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=6a9b1996e41abd187d27e9a3e3034496077fe926;p=gnome-shell.git ShellIdleMonitor: turn it into a singleton It doesn't make sense to have multiple ShellIdleMonitors, since each has its own GDK filter function, but they all get the same events. In preparation for having it accessed from other places than the message tray, make it a singleton. https://bugzilla.gnome.org/show_bug.cgi?id=682041 --- diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index 1ce114e6d..eabf6a7d5 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -1508,7 +1508,7 @@ const MessageTray = new Lang.Class({ this._idleMonitorWatchId = 0; this._backFromAway = false; - this.idleMonitor = new Shell.IdleMonitor(); + this.idleMonitor = Shell.IdleMonitor.get(); // To simplify the summary item animation code, we pretend // that there's an invisible SummaryItem to the left of the diff --git a/src/shell-idle-monitor.c b/src/shell-idle-monitor.c index 22581d100..592f4772c 100644 --- a/src/shell-idle-monitor.c +++ b/src/shell-idle-monitor.c @@ -316,15 +316,21 @@ shell_idle_monitor_init (ShellIdleMonitor *monitor) monitor->priv->counter = None; } +/** + * shell_idle_monitor_get: + * + * Returns: (transfer none): the global #ShellIdleMonitor. + */ ShellIdleMonitor * -shell_idle_monitor_new (void) +shell_idle_monitor_get (void) { - GObject *idle_monitor; + static ShellIdleMonitor *idle_monitor; - idle_monitor = g_object_new (SHELL_TYPE_IDLE_MONITOR, - NULL); + if (G_UNLIKELY (idle_monitor == NULL)) + idle_monitor = g_object_new (SHELL_TYPE_IDLE_MONITOR, + NULL); - return SHELL_IDLE_MONITOR (idle_monitor); + return idle_monitor; } static gboolean diff --git a/src/shell-idle-monitor.h b/src/shell-idle-monitor.h index 1086d9216..2fcd0820b 100644 --- a/src/shell-idle-monitor.h +++ b/src/shell-idle-monitor.h @@ -56,7 +56,7 @@ typedef void (*ShellIdleMonitorWatchFunc) (ShellIdleMonitor *monitor, GType shell_idle_monitor_get_type (void); -ShellIdleMonitor * shell_idle_monitor_new (void); +ShellIdleMonitor * shell_idle_monitor_get (void); guint shell_idle_monitor_add_watch (ShellIdleMonitor *monitor, guint interval,